package com.wy.utils;

import com.sun.javafx.tk.TKPulseListener;
import org.apache.commons.lang3.RandomUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
 * 日期工具类
 */
public class DateUtils {
    public static void main(String[] args) {
        System.out.println(getAgeByBirth("2021-02-25"));
    }

    static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

    //①　获取指定范围的随机日期 （10分）
    public static String getDatefw(String begin,String end){
        //获取当前日期类；
        long newtime=0;
        try {
            long begintime =sdf.parse(begin).getTime();
            long endtime =sdf.parse(end).getTime();
            //比如开始时间是10，结束时间是90；  中间时间就是10+（90-10）*0.5
             newtime=(long)(begintime+(endtime-begintime)*Math.random());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return sdf.format(new Date(newtime));
    }

    //②　根据生日获取年龄（10分）
    public static int getAgeByBirth(String birthday){
        int age = 0;
        try {
            Calendar now = Calendar.getInstance();//获取当前时间的日历对象
            now.setTime(new Date());// 当前时间

            //获取生日当天的日历对象
            Calendar birth = Calendar.getInstance();
            birth.setTime(sdf.parse(birthday));

            if (birth.after(now)) {//如果传入的时间，在当前时间的后面，返回0岁
                age = 0;
            } else {
                //获取当前年份和生日年份的差，就是年龄 （周岁）
                age = now.get(Calendar.YEAR) - birth.get(Calendar.YEAR);
                //DAY_OF_YEAR年内的第几条；如果现在的日期天数大于生日的日期天数。年龄再加1 （虚岁）
                if (now.get(Calendar.DAY_OF_YEAR) > birth.get(Calendar.DAY_OF_YEAR)) {
                    age += 1;
                }
            }
            return age;
        } catch (ParseException e) {
            e.printStackTrace();
            return 0;
        }

    }


    //③　获取一个人性化日期（10分）
    public static String getFormarDate(Date date,String format){
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }

    //④　获取指定日期的月初（10分）
    public static String getDateBegin(String date){
        String format ="";
        try {
            Calendar instance = Calendar.getInstance();//获取日历实例
            instance.setTime(sdf.parse(date));//设置日历日期
            instance.set(Calendar.DAY_OF_MONTH,1);//设置成传入月份的第一天
            format =sdf.format(instance.getTime());//把instance转换为字符串
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return format;
    }
    //⑤　获取指定日期的月末（10分）
    public static String getDateEnd(String date){
        String format ="";
        try {
            Calendar instance = Calendar.getInstance();//获取日历实例
            instance.setTime(sdf.parse(date));//设置日历日期
            instance.set(Calendar.DAY_OF_MONTH,instance.getActualMaximum(Calendar.DAY_OF_MONTH));//设置成传入月份的第一天
            format =sdf.format(instance.getTime());//把instance转换为字符串
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return format;
    }
    //用指定日期加减天数（10分）
    public static String addDay(String date,int day){
        String format ="";
        try {
            Calendar instance = Calendar.getInstance();//获取日历实例
            instance.setTime(sdf.parse(date));//设置日历日期
            instance.add(Calendar.DAY_OF_MONTH,day);
            format =sdf.format(instance.getTime());//把instance转换为字符串
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return format;
    }
    //用指定日期加减天数（10分）
    public static String addDay(Date date,int day){
        String format ="";
        try {
            Calendar instance = Calendar.getInstance();//获取日历实例
            instance.setTime(date);//设置日历日期
            instance.add(Calendar.DAY_OF_MONTH,day);
            format =sdf.format(instance.getTime());//把instance转换为字符串
        } catch (Exception e) {
            e.printStackTrace();
        }
        return format;
    }







}
